home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / news / vnres112 / part02 / envir_set.c < prev    next >
C/C++ Source or Header  |  1991-03-14  |  4KB  |  201 lines

  1. /*
  2. ** vn news reader.
  3. **
  4. ** envir_set.c - routine to obtain pertinent environment variable settings
  5. **        and set up file / directory names
  6. **
  7. ** see copyright disclaimer / history in vn.c source file
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <pwd.h>
  12.  
  13. #ifndef MINIX
  14. #ifndef MSDOS
  15. #ifndef amiga
  16. /* minix does not have this */
  17. #include <sys/param.h>
  18. #endif
  19. #endif
  20. #endif
  21.  
  22. #include "tune.h"
  23. #include "config.h"
  24. #include "vn.h"
  25.  
  26. extern char *Editor, *Ps1, *Printer;
  27. extern char *Orgdir, *Savedir, *Ccfile;    /* path names */
  28. extern char Cxitop[], Cxitor[], Cxrtoi[], Cxptoi[];
  29. extern char *Home;
  30. extern int More;
  31.  
  32. #ifdef SYSV
  33. #ifndef amiga
  34. extern char *getcwd();
  35. #endif
  36. #define getwd(a) getcwd(a,sizeof(a))
  37. #define    MAXPATHLEN 240
  38. #else
  39. extern char *getwd();
  40. #endif
  41.  
  42. static set_kxln ();
  43. static char xln_str ();
  44.  
  45. /*
  46.     environment variable, original directory string setup.
  47. */
  48.  
  49. envir_set ()
  50. {
  51.     char dbuf [MAXPATHLEN], *ccname, *keyxln;
  52.     char *vn_env(), *str_store();
  53. #ifndef amiga
  54.     char * *getcwd();
  55. #endif
  56.     struct passwd *ptr, *getpwuid();
  57.  
  58.     vns_envir();
  59.     More = 0;
  60.  
  61.     Ps1 = vn_env("PS1",DEF_PS1);
  62.     Editor = vn_env("EDITOR",DEF_ED);
  63.     Printer = vn_env("PRINTER",DEF_PRINT);
  64.     ccname = vn_env("CCFILE",DEF_CCFILE);
  65.     keyxln = vn_env("VNKEY",DEF_KEYXLN);
  66.     Savedir = vn_env("VNSAVE",NULL);
  67.     More = (strcmp(vn_env("MORE",""), "-c") == 0 ? TRUE : FALSE);
  68.  
  69.     /*
  70.         set original directory strings.
  71.     */
  72.  
  73.     if ((ptr = getpwuid(getuid())) == NULL)
  74.         printex("Cannot obtain /etc/passwd entry");
  75.     Home = str_store(ptr->pw_dir);
  76.     if ((Orgdir = getwd(dbuf)) == NULL)
  77.         printex ("cannot stat pwd");
  78.     Orgdir = str_store (Orgdir);
  79.     if (Savedir == NULL)
  80.         Savedir = Orgdir;
  81.     if (*ccname != DIRSEP)
  82.     {
  83. #ifdef amiga
  84.         sprintf (dbuf, "%s%s",Home,ccname);
  85. #else
  86.         sprintf (dbuf, "%s%c%s",Home,DIRSEP,ccname);
  87. #endif
  88.         Ccfile = str_store (dbuf);
  89.     }
  90.     else
  91.         Ccfile = str_store (ccname);
  92. #ifdef amiga
  93.     sprintf (dbuf, "%s%s%s",Home,"vn","XXXXXX");
  94. #else
  95.     sprintf (dbuf, "%s%c%s%s",Home,DIRSEP,"vn","XXXXXX");
  96. #endif
  97.  
  98.     if (*keyxln != DIRSEP)
  99.     {
  100. #ifdef amiga
  101.         sprintf(dbuf, "%s%s",Home,keyxln);
  102. #else
  103.         sprintf(dbuf, "%s%c%s",Home,DIRSEP,keyxln);
  104. #endif
  105.         set_kxln(dbuf);
  106.     }
  107.     else
  108.         set_kxln(keyxln);
  109. }
  110.  
  111. char *
  112. vn_env(var,def)
  113. char *var;
  114. char *def;
  115. {
  116.     char pfx[RECLEN];
  117.     char *res;
  118.     char *getenv();
  119.     char * GetConfig(char *field, char *def);
  120.  
  121.     if (var[0] != 'V' || var[1] != 'N')
  122.     {
  123.         sprintf(pfx,"VN%s",var);
  124. #ifdef amiga
  125.         if ((res = GetConfig(pfx, NULL)) == NULL)
  126.             if ((res = getenv(pfx)) != NULL)
  127.                 return(res);
  128.         return(res);
  129. #else
  130.         if ((res = getenv(pfx)) != NULL)
  131.             return(res);
  132. #endif
  133.     }
  134.  
  135. #ifdef amiga
  136.     if ((res = GetConfig(var, NULL)) == NULL)
  137.         if ((res = getenv(var)) != NULL)
  138.                 return(res);
  139.     return(res);
  140. #else
  141.     if ((res = getenv(var)) != NULL)
  142.         return(res);
  143. #endif
  144.     return(def);
  145. }
  146.  
  147. static
  148. set_kxln(fname)
  149. char *fname;
  150. {
  151.     FILE *fp;
  152.     int i;
  153.     char bufr[80];
  154.     char in,out,*ptr;
  155.     char *index();
  156.  
  157.     for (i=0; i < CHMASK+1; ++i)
  158.         Cxitop[i] = Cxitor[i] = Cxptoi[i] = Cxrtoi[i] = i;
  159.  
  160.     if ((fp = fopen(fname,"r")) != NULL)
  161.     {
  162.         while(fgets(bufr,79,fp) != NULL)
  163.         {
  164.             if (strncmp(bufr+1,"==",2) == 0)
  165.                 ptr = bufr+2;
  166.             else
  167.                 ptr = index(bufr+1,'=');
  168.             if (ptr == NULL)
  169.                 continue;
  170.             *ptr = '\0';
  171.             ++ptr;
  172.             in = xln_str(bufr+1);
  173.             out = xln_str(ptr);
  174.             switch(bufr[0])
  175.             {
  176.             case 'r':
  177.             case 'R':
  178.                 Cxrtoi[out] = in;
  179.                 Cxitor[in] = out;
  180.                 break;
  181.             case 'p':
  182.             case 'P':
  183.                 Cxptoi[out] = in;
  184.                 Cxitop[in] = out;
  185.             default:
  186.                 break;
  187.             }
  188.         }
  189.         fclose(fp);
  190.     }
  191. }
  192.  
  193. static char
  194. xln_str(s)
  195. char *s;
  196. {
  197.     if (*s < '0' || *s > '9')
  198.         return(*s & CHMASK);
  199.     return((char)(atoi(s) & CHMASK));
  200. }
  201.